vlwkaos' digital garden

자바스크립트 유니코드 문제

à는 한글자일까? 아니다. 유니코드는 저 글자를 a' 두개의 글자의 조합으로 표현한다. (aU+0061이고, 악센트는 U+0300 이다).

정규표현식 ^.$로 위의 글자를 매칭하면 a만 인식한다.

방금 한글자가 아니라고 했는데, 사실 한글자일 수도 있다. 유니코드 U+00E0à를 나타낸다. 왜 두 가지 방식으로 표현되는 걸까? 예전의 글자 모음(character set)은 악센트가 표기된 라틴 글자를 하나로 encoding 했었다. 쉽게 말하자면 옛날 자판에는 à를 직접 입력하는 키가 있었다. 즉, 한글자 악센트의 라틴 글자는 레거시다.

\X는 유니코드 버전의 모든 문자를 대치할 수 있는 정규표현식이다. 하지만 개행 문자까지 매칭하기 때문에 그냥 쓰기에는 번거롭다. 편하게 유니코드 문자를 인식할 수 있는 방법은 없을까?

개발을 하는 사람은 모두 알겠지만 .은 한글자를 매칭하는 정규표현식이다. 그런데 유니코드 문자의 경우 악센트와 같은 부분이 한글자를 차지하기 때문에 제대로 인식하지 못한다.

이를 해결하는 방법 중 하나는 [[유니코드 정규화]]다.

참조

자바스크립트 유니코드 문제